/**
 * @description: 判断用户菜单和操作权限，code根据实际配置情况配置
 * 使用方式：
 * 1. v-permission=['ALARM_PAGE'] // 可以确定是否有报警菜单
 * 2. v-permission=['ALARM_PAGE.U'] // 可以确定是否有报警菜单中的更新操作
 */
import type { Directive } from 'vue';

import { useUserStore } from '@/store/user';
import { intersection } from '@/utils/index';

export const permission: Directive = {
  mounted(el: any, binding: any) {
    const userStore = useUserStore();
    const authKeys: string[] = userStore.authKeys;

    const { value } = binding; // 指令接收到的值

    if (value && value.length) {
      const hasPermission = intersection(authKeys, value).length > 0;
      if (!hasPermission) {
        el.remove(); // 如果没有权限移除自身节点
      }
    } else {
      throw new Error('need roles! Like v-permission="[\'admin\',\'editor\',\'homepage.r\',\'homepage.u\']"');
    }
  },
};
